题目描述
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: $[3,9,20,null,null,15,7]$,
返回其层次遍历结果:
1 2 3 4 5
| [ [3], [20,9], [15,7] ]
|
提示:
- $节点总数 <= 1000$
算法
(BFS,层序遍历) $O(n)$
和 剑指 Offer 32 - II. 从上到下打印二叉树 II 层序遍历的思路一样,只需要通过一个 $bool$ 变量在每行遍历结束之后翻转下一行的顺序即可。
时间复杂度
$O(n)$
空间复杂度
$O(n)$
C++ 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> ans; queue<TreeNode*> q;
if (root) q.push(root);
bool zigzag = false; while (q.size()) { int sz = q.size(); vector<int> line; while (sz -- ) { auto t = q.front(); q.pop();
line.push_back(t->val); if (t->left) q.push(t->left); if (t->right) q.push(t->right); } if (zigzag) reverse(line.begin(), line.end()); ans.push_back(line); zigzag = !zigzag; }
return ans; } };
|